# 单例模式：让类创建的对象，在系统中只有唯一的一个实例
# 实现单例：利用全局变量和__new__()内置方法
# 实现原理：使用类名()创建对象时，Python的解释器首先会调用__new__方法（返回对象的引用）为对象分配空间
# 然后Python的解释器获得对象的引用后，将引用作为第一个参数，传递给 __init__方法进行初始化
class A:
    instance = None  # 类属性（只会被执行一次）instance用来保存对象的引用（地址）

    def __new__(cls, *args, **kwargs):  # 重写__new__()
        if cls.instance is None:
            cls.instance = super().__new__(cls)  # 调用父类的__new__()
        return cls.instance  # 若instance！=None,说明类已经实例化了一个对象，此时返回之前对象的引用

    def __init__(self, name):
        self.name = name


aaa = A('aaa')
bbb = A('bbb')
print(aaa is bbb)
print(aaa.name)
print(bbb.name)
